import cv2
import exifread
from osgeo import gdal
from PIL import Image

"""
:param file_path: 输入图片路径
:return: 图片的偏航角
"""
def Get_Image_Yaw_angle(file_path):
	# 获取图片偏航角
	print("----------------------------------大疆exifread信息---------------------------------")
	# 定义字节模式 b 和 a，用于查找大疆EXIF数据的起始和结束标记
	b = b"\x3c\x2f\x72\x64\x66\x3a\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\x3e"
	a = b"\x3c\x72\x64\x66\x3a\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\x20"
	# 打开图片文件，以二进制模式读取
	img = open(file_path, 'rb')
	# 初始化一个字节数组用于存储EXIF数据
	data = bytearray()
	# 初始化一个标志，用于判断是否已经找到EXIF数据的起始标记
	flag = False
	# 逐行读取图片文件内容
	for line in img.readlines():
		# 如果当前行包含EXIF数据的起始标记，则设置标志为True
		if a in line:
			flag = True
		# 如果标志为True，则将当前行添加到EXIF数据中
		if flag:
			data += line
		# 如果当前行包含EXIF数据的结束标记，则跳出循环
		if b in line:
			break
		# 如果提取到的EXIF数据不为空
	dj_data_dict = {}
	# 遍历过滤后的行，并提取键值对存入字典中
	if len(data) > 0:
		# 将字节数据解码为ASCII字符串
		data = str(data.decode('ascii'))
		# 过滤出包含drone-dji的行，并分割每行为键值对
		lines = list(filter(lambda x: 'drone-dji:' in x, data.split("\n")))
		# 初始化一个空字典用于存储提取到的数据
		for d in lines:
			d = d.strip()[10:]  # 去除每行的前后空格和'\n'字符，并从第10个字符开始处理（因为drone-dji:占据了前9个字符）
			k, v = d.split("=")  # 将当前行分割为键和值两部分
			print(f"{k} : {v}")  # 打印键和值
			dj_data_dict[k] = v  # 将键值对存入字典中
	return float(dj_data_dict["FlightYawDegree"][1:-1])  # 返回偏航角的值。如果未找到偏航角，则返回None。

if __name__ == "__main__":
	image_path = "C:\\Users\\Administrator\\Desktop\\fa43a6a3-5cde-4925-8acd-db1c8a7cb013\\DJI_20250319165418_0001_V.JPG"
	yaw = Get_Image_Yaw_angle(image_path)
	print(yaw)